package com.iori.common.util;

import java.math.BigDecimal;

import com.iori.common.exception.ExceptionConf;
import com.iori.common.exception.FounderUtilException;

/**
 * Numberツールクラス
 *
 * @author Founder
 *
 */
public class NumberUtil {

	/**
	 * 入力されたStringパラメータがNumerタイプであるかを検査する
	 *
	 * @param arg
	 * @return
	 */
	public static boolean isNumber(String arg) {
		boolean flg = true;

		if (arg == null || arg.trim().equals("")) {
			return false;
		}

		try {
			Double.parseDouble(arg);
		} catch (NumberFormatException e) {
			flg = false;
		}
		return flg;
	}

	/**
	 * 入力されたStringパラメータをint型に変化する
	 *
	 * @param str
	 * @return
	 */
	public static int toInt(String str) throws FounderUtilException {
		try {
			return Integer.valueOf(str).intValue();
		} catch (Exception e) {
			throw new FounderUtilException(str + " can't convert to int",
					ExceptionConf.ERROR_UTIL_NUMBER);
		}
	}

	/**
	 * 入力されたStringパラメータをlong型に変換する
	 *
	 * @param str
	 * @return
	 * @throws BetyUtilException
	 */
	public static long toLong(String str) throws FounderUtilException {
		try {
			return Long.valueOf(str).longValue();
		} catch (Exception e) {
			throw new FounderUtilException(str + " can't convert to long",
					ExceptionConf.ERROR_UTIL_NUMBER);
		}
	}

	/**
	 * 入力されたStringをBigDecimalに変換する
	 *
	 * @param num
	 * @param scale
	 * @param roundingMode
	 * @return
	 * @throws BetyUtilException
	 */
	public static BigDecimal toBigDecimal(String num, int scale)
			throws FounderUtilException {
		BigDecimal ret = null;
		if (num == null || !isNumber(num)) {
			throw new FounderUtilException(num + " can't convert to BigDecimal",
					ExceptionConf.ERROR_UTIL_NUMBER);
		} else {
			ret = new BigDecimal(num);
		}
		ret = ret.setScale(scale, 0);
		return ret;
	}

	/**
	 * 入力されたStringパラメータをfloatl型に変換する
	 *
	 * @param str
	 * @return
	 * @throws BetyUtilException
	 */
	public static float toFloat(String str) throws FounderUtilException {
		try {
			return Float.valueOf(str).floatValue();
		} catch (Exception e) {
			throw new FounderUtilException(str + " can't convert to float",
					ExceptionConf.ERROR_UTIL_NUMBER);
		}
	}
	
    /**
     * 金額格式にフォーマットする
     * 
     * @param number
     * @return
     */
	public static String numberToFinanceFormat(String number){
		
    	if(number==null||number.trim().equals("")) return "0";
    	String part0 = "";
    	String part1 = "";
    	if(number.indexOf(".")>0) {
    		part0 = number.substring(0,number.indexOf("."));
    		part1 = number.substring(number.indexOf(".")+1);
    	}
    	if(number.indexOf(".")<0) part0 = number;
       	if(part0.length()<4 ) return number ;
    	String str = "";
    	for(int i =part0.length();i>3;i=i-3){
    		String s0 = part0.substring(part0.length()-3);
    		part0 = part0.substring(0,part0.length()-3);
    		str +=","+s0; 
    		if(part0.length()<4) str = part0 + str ;
    	}
    	if(part1.equals("")){
    		return str;
    	}else{
    	  return str+"."+part1;
    	}
    }
}
